package modelo;
/**
 * Clase que modela un robot militar del juego, esto es, un robot que posee capacidad para disparar
 * @author Francisco Barreneche
 *
 */
public class RobotMilitar extends Robot{
	protected int cant_balas;
	
	/**
	 * Constructor que permite inicializar el estado interno del robot militar
	 * @param c La celda en la que va a estar el robot
	 * @param m El mapa en el que se va a mover el robot
	 */
	public RobotMilitar(Celda c, Mapa m) {
		super(c,m);
		this.combustible = 100;
		this.cant_balas = 10;
	}
	
	/**
	 * Getter para el atributo cant_balas
	 * @return Un entero que indica la cantidad de balas que tiene el robot militar
	 */
	public int obtenerCantBalas() {
		return this.cant_balas;
	}
	
	//comandos
	/**
	 * Metodo que permite agregar balas al robot militar
	 * @param cant Un entero que representa la cantidad de balas a ser agregadas
	 */
	public void agregarBalas(int cant) {
		this.cant_balas = this.cant_balas + cant;
	}
	
	/**
	 * Metodo que permite quitar balas al robot militar
	 * @param cant Un entero que representa la cantidad de balas a ser quitadas
	 */
	public void quitarBalas(int cant) {
		if(this.cant_balas - cant < 0) this.cant_balas = 0;
		else this.cant_balas = this.cant_balas - cant;
	}
	
	/**
	 * Metodo que permite al robot militar disparar una bala.
	 */
	public void disparar() {
		if(this.cant_balas>0) {
			//actualizo la cantidad de balas
			this.cant_balas = this.cant_balas - 1;
			
			//busco el objeto al que el tiro va a chocar si es que existe
			int x = this.celda_actual.obtenerX(); 
			int y = this.celda_actual.obtenerY();
			boolean encontreObstaculo=false;
			Celda aux=null;
			
			if(this.direccion == Robot.DERECHA) {
				while(y<Mapa.CANT_COLUMNAS && !encontreObstaculo) {
					aux = this.mapa.obtenerCelda(x, y+1);
					if(aux!=null && aux.hayObstaculo()) encontreObstaculo = true;
					y++;
				}
			}
			
			y = this.celda_actual.obtenerY();
			if(this.direccion == Robot.IZQUIEDA) {
				while(y>=0 && !encontreObstaculo) {
					aux = this.mapa.obtenerCelda(x, y-1);
					if(aux!=null && aux.hayObstaculo()) encontreObstaculo = true;
					y--;
				}
			}
			
			y = this.celda_actual.obtenerY();
			if(this.direccion == Robot.ARRIBA) {
				while(x>=0 && !encontreObstaculo) {
					aux = this.mapa.obtenerCelda(x-1, y);
					if(aux!=null && aux.hayObstaculo()) encontreObstaculo = true;
					x--;
				}
			}
			
			x = this.celda_actual.obtenerX();
			if(this.direccion == Robot.ABAJO) {
				while(x<Mapa.CANT_FILAS && !encontreObstaculo) {
					aux = this.mapa.obtenerCelda(x+1, y);
					if(aux!=null && aux.hayObstaculo()) encontreObstaculo = true;
					x++;
				}
			}
			
			
			if(encontreObstaculo) aux.obtenerObstaculo().recibirDisparo();
			
		}
	}
	
	/**
	 * Retorna el String "robotMilitar", que identifica a un robot militar
	 */
	@Override
	public String obtenerIdentificador() {
		return "robotMilitar";
	}
}
